/* 
 * File:   HashTableIterator.h
 * Author: igui
 *
 * Created on 29 de mayo de 2011, 01:19 AM
 */

#ifndef HASHTABLEITERATOR_H
#define	HASHTABLEITERATOR_H

#include "../interfacesCol/IIterator.h"
#include "../interfacesCol/HashedKey.h"
#include "../interfacesCol/ICollectible.h"
#include "HashTable.h"



class HashTableIterator: public IIterator
{
private:
    int keysSize;
    HashedKey **tableKeys;
    int currentIndex;
    HashTable& table;
public:
    /// toma la tabla de la cual hace la iteración
    HashTableIterator(HashTable& table);
    
    // true si hay elemento para iterar
    bool hasCurrent();
    
    // va hacia el siguiente. Si hasCurrent() es false 
    // tira excepción out_of_range
    void next();
    
    // da el elemento actual. Si hasCurrent() es false tira excepción
    // out_of_range
    ICollectible *getCurrent();
    
    ~HashTableIterator();
};

#endif	/* HASHTABLEITERATOR_H */

